java的一个byte[]和String转化问题,不好做呀??

来源:百度知道 编辑:UC知道 时间:2024/05/07 23:58:05
String str = "学院:电信\n班级:84\n学号: 123456789";
output.write(str.getBytes());
现在,把这个str写到了一个流当中;
然后,从流当中读出来:
String info = "";//新建一个字符串
byte[] buffer = new byte[20];//缓冲区大小
while(input.read(buffer)==20){//如果不等于20,说明流里面数据不足20或者已经到了末尾
info += new String(buffer).toString();//把取出的数据转化为字符串存储到info中
}
info += new String(buffer).toString();//读取流中剩余的数据
System.out.println(new String(info.getBytes()).toString());//问题就在这里:

问题:假如str长度是50个字节,而buffer只有20个字节,当初output一次将str写到了流当中,如果buffer大于50,那么input可以一次从流中读出全部数据,并且显示完全正确;
可是buffer为20时,也就是要分多次从流当中取数据,而每次取出的20字节的数被转化为string,存起来,最后将这几个字符串连接起来,就是完整的数据,可是显示的已经不是当初的str = "学院:电信\n班级:84\n学号: 123456789";。
也就是说,如果把str转化为byte[],然后一次性的把byte[]再转化回str,那么就是正确的;
如果把str转化为byte[],然后把byte[]转化成多个字符串,把这几个字符串连接起来得到的str显示就是错误的。
但是又没有别的办法存储byte[],如果另外用多个个byte数组存储byte[],事先根本无法知道这些数组的长度,并且如果byte[]很大的话,要创建相当多的byte数组存储byte[],这显然不可取。
请教大家:有什么办法???

str 中有中文,所有你的inputStream必须是字符型的,才能读出中文来。不过我看你的应该不是字符型的,因为你定义了一个byte[] buffer 的字节数组,你把一个中文拆成两个字节,然后输出来应该是一堆问号吧。
----------------------------------
补充:最好是不要尝试用字节型的数组储存字符型的数据,你把4个汉字1,2,3,4拆成1,2,3,4,5,6,7,8,鬼知道那个和那个是一组。我的建议是将你的输入流和输出流定义成字符型,用一个StringBuffer strb 来作为缓冲区,而不要用字节数组来接受
最后说一下,字符和字节那么容易区分API就不用定义4个抽象流类型了。

你可以这样处理啊:
先定义一个int型的变量,int len;
while((len=input.read(buf))!=-1)
{
info+=new String(buf).toString();
}

楼主,那你要用到一个 BufferedInputStream 类
方法你看看吧..

//这是我以前学校的时候用的..你看看..对你可能有点帮助
//我给你写了2种,另外种是针对你说的byte[]数组取

package 第十七章_文件合流;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class 写取数据 {
public static void main(String rags[]) {
//-------------------------------写数据-----------------------
File f = new File("c:/Hello.txt"); //创建管道,保存在C盘
try {
f.createNewFile(